﻿using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace themovieproduction.siniflar
{
    public class context
    {   //-------------------- sifreleme key ------------------------//
        private static string  password = "azIlker345";


        //-------------------- Sql islemleri icin gerekli olan metodlar ----------------------//
      

        public static int myekle(string tabloadi, object[] kolonlar, object[] degerler)
        {
            int durum = 0;
            try
            {
                string sorgu = "";
                string sorgu1 = "";
                string sorgu2 = "";
                // insert into products (ProductName,UnitPrice,UnitsINStock) values (@ProductName,@UnitPrice,@UnitsINStock)
                for (int i = 0; i < kolonlar.Length; i++)
                {
                    if (i != kolonlar.Length - 1)
                    {
                        sorgu1 += kolonlar[i].ToString() + ',';
                        sorgu2 += '@' + kolonlar[i].ToString() + ',';
                    }
                    else
                    {
                        sorgu1 += kolonlar[i].ToString();
                        sorgu2 += '@' + kolonlar[i].ToString();
                    }
                }
                sorgu = "insert into " + tabloadi + "(" + sorgu1 + ")" + " values(" + sorgu2 + ")";
                MySqlConnection sqlcon = connection.baglanti2;
                MySqlCommand sqlcmd = new MySqlCommand(sorgu, sqlcon);
                for (int i = 0; i < kolonlar.Length; i++)
                {
                    sqlcmd.Parameters.AddWithValue("@" + kolonlar[i].ToString(), degerler[i].ToString());
                }
                sqlcon.Open();
                sqlcmd.ExecuteNonQuery();
                sqlcon.Close();
                durum = 1;
                return durum;
            }
            catch (Exception)
            {
                return durum;
            }
        }

        public static int mysil(string tabloadi, string[] belirteckolon, string[] belirtecdeger, string baglac)
        {
            int durum = 0;
            string sorgu = "";
            string sorgu1 = "";
            try
            {
                switch (baglac)
                {
                    case "and":
                        for (int i = 0; i < belirteckolon.Length; i++)
                        {
                            if (i != belirteckolon.Length - 1)
                            {
                                sorgu1 += belirteckolon[i] + "=@" + belirteckolon[i] + " and ";
                            }
                            else
                            {
                                sorgu1 += belirteckolon[i] + "=@" + belirteckolon[i];
                            }
                        }
                        sorgu = "delete from " + tabloadi + " where " + sorgu1;
                        break;
                    case "or":
                        for (int i = 0; i < belirteckolon.Length; i++)
                        {
                            if (i != belirteckolon.Length - 1)
                            {
                                sorgu1 += belirteckolon[i] + "=@" + belirteckolon[i] + " or ";
                            }
                            else
                            {
                                sorgu1 += belirteckolon[i] + "=@" + belirteckolon[i];
                            }

                        }
                        sorgu = "delete from " + tabloadi + " where " + sorgu1;
                        break;
                    default:
                        sorgu = "delete from " + tabloadi + " where " + belirteckolon[0] + "=@" + belirteckolon[0];
                        break;
                }
                SqlConnection sqlcon = connection.baglanti;
                SqlCommand sqlcmd = new SqlCommand(sorgu, sqlcon);
                for (int i = 0; i < belirteckolon.Length; i++)
                {
                    sqlcmd.Parameters.AddWithValue("@" + belirteckolon[i], belirtecdeger[i]);
                }
                sqlcon.Open();
                sqlcmd.ExecuteNonQuery();
                sqlcon.Close();
                durum = 1;
                return durum;
            }
            catch (Exception)
            {



                return durum;
            }



        }

        public static int myguncelle(string tabloadi, string[] kolonlar, string[] degerler, string belirteckolon, string belirtecdeger)
        {
            int durum = 0;
            string sorgu = "";
            string sorgu1 = "";
            string sorgu2 = "";
            try
            {
                for (int i = 0; i < kolonlar.Length; i++)
                {
                    if (i != kolonlar.Length - 1)
                    {
                        sorgu1 += kolonlar[i] + "=@" + kolonlar[i] + ",";

                    }
                    else
                    {
                        sorgu1 += kolonlar[i] + "=@" + kolonlar[i];
                    }

                }
                sorgu2 += belirteckolon + " = @" + belirteckolon;

                // sorgu= update products set Productname=@Productname where productID=@productID


                sorgu = "update " + tabloadi + " set " + sorgu1 + " where " + sorgu2;
                SqlConnection sqlcon = connection.baglanti;
                SqlCommand sqlcmd = new SqlCommand(sorgu, sqlcon);

                for (int i = 0; i < kolonlar.Length; i++)
                {
                    sqlcmd.Parameters.AddWithValue("@" + kolonlar[i], degerler[i]);
                }
                sqlcmd.Parameters.AddWithValue("@" + belirteckolon, belirtecdeger);


                sqlcon.Open();


                sqlcmd.ExecuteNonQuery();
                sqlcon.Close();


                durum = 1;
                return durum;


            }
            catch (Exception)
            {

                return durum;
            }










        }



        //----------------- Tarih islemleri icin metodlar -------------------------------//
        public static string sadecetarih()
        {
            string gun = DateTime.Now.Day.ToString();
            string yil = DateTime.Now.Year.ToString();
            int ay = Convert.ToInt32(DateTime.Now.Month);
            string ayy = "";
            if (ay <= 9)
            {
                ayy = "0" + ay.ToString();
            }
            else
            {
                ayy = ay.ToString();
            }
            string bugun = yil + "-" + ayy + "-" + gun;
            return bugun;
        }

        public static string verilen_tarih(string tarih)
        {
            // 27.01.2014 ,000000
            string a = tarih;
            a = tarih.Substring(0, 10);
            string[] dizi = a.Split('.');

            string donentarih = dizi[2] + "-" + dizi[1] + "-" + dizi[0];
            return donentarih;
        }

        public static string ileritarih(TimeSpan ts)
        {

            TimeSpan nts = ts;
            DateTime dt = new DateTime();
            dt = DateTime.Now + nts;

            // string gun = DateTime.Now.Day.ToString();
            string gun = dt.Day.ToString();
            string yil = dt.Year.ToString();
            int ay = Convert.ToInt32(dt.Month);
            string ayy = "";
            if (ay <= 9)
            {
                ayy = "0" + ay.ToString();
            }
            else
            {
                ayy = ay.ToString();
            }
            string bugun = yil + "-" + ayy + "-" + gun;
            return bugun;
        }


        //------------------ olcu ve birimler ile ilgili metodlar ------------------------------//



        //---------------sifreleme islemleri icin gecerli metodlar -----------------------------//

        private static byte[] Sifrele(byte[] SifresizVeri, byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms,
            alg.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(SifresizVeri, 0, SifresizVeri.Length);
            cs.Close();
            byte[] sifrelenmisVeri = ms.ToArray();
            return sifrelenmisVeri;
        }

        private static byte[] SifreCoz(byte[] SifreliVeri,byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms,
                alg.CreateDecryptor(), CryptoStreamMode.Write);

            cs.Write(SifreliVeri, 0, SifreliVeri.Length);
            cs.Close();
            byte[] SifresiCozulmusVeri = ms.ToArray();
            return SifresiCozulmusVeri;
        }

        public static string encrypte(string sifrelenecekMetin)
        {
            
            byte[] sifrelenecekByteDizisi = System.Text.Encoding.Unicode.GetBytes(sifrelenecekMetin);
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d,
            0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76});

            byte[] SifrelenmisVeri = Sifrele(sifrelenecekByteDizisi,
                 pdb.GetBytes(32), pdb.GetBytes(16));
            return Convert.ToBase64String(SifrelenmisVeri);
        }

        public static string decrypte(string text)
        {
         
            byte[] SifrelenmisByteDizisi = Convert.FromBase64String(text);
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(password,
                new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65,
            0x64, 0x76, 0x65, 0x64, 0x65, 0x76});

            byte[] SifresiCozulmusVeri = SifreCoz(SifrelenmisByteDizisi,
                pdb.GetBytes(32), pdb.GetBytes(16));

            return System.Text.Encoding.Unicode.GetString(SifresiCozulmusVeri);
        }

        public static string asimetrik(string parametre)
        {
            // MD5CryptoServiceProvider nesnenin yeni bir instance'sını oluşturalım.
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

            //Girilen veriyi bir byte dizisine dönüştürelim ve hash hesaplamasını yapalım.
            byte[] btr = Encoding.UTF8.GetBytes(parametre);
            btr = md5.ComputeHash(btr);

            //byte'ları biriktirmek için yeni bir StringBuilder ve string oluşturalım.
            StringBuilder sb = new StringBuilder();


            //hash yapılmış her bir byte'ı dizi içinden alalım ve her birini hexadecimal string olarak formatlayalım.
            foreach (byte ba in btr)
            {
                sb.Append(ba.ToString("x2").ToLower());
            }

            //hexadecimal(onaltılık) stringi geri döndürelim.
            return sb.ToString();


          
        }


        //-------------------------- format kontrolleri ile ilgili metodlar------------------------//

        public static bool mailformat(string mail)
        {
            return false;
        // email formatina uygunluk kontrolu yapiyoruz
        }


        

        



    }
}